﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace QuanLyBepAnTuThien
{
    public partial class UcQuanLyNhanVien : UserControl
    {
        public UcQuanLyNhanVien()
        {
            InitializeComponent();
        }
        connect cn = new connect();
        bool them = true;
        int vitri = 0;
        private void loadData() // hàm load data từ CSDL đỏ vào datagridview và combobox
        {
            txtTim.Text = "";
            gridViewNhanVien.Columns.Clear();
            gridViewNhanVien.OptionsBehavior.Editable = false;
            gridControlNhanVien.DataSource = cn.getDataTable("tblNhanVien_DS");
            cobTo.DataSource = cn.getDataTable("tblTo_DS");
            cobTo.DisplayMember = "TenTo";
            cobTo.ValueMember = "MaTo";
        }
        private void BatTatTextBox(bool val) // hàm bật hoặc tắt các textbox nâập thông tin. val=true bật, val=false tắt
        {
            foreach (Control cr in grbThongTinNhanVien.Controls)
            {
                if (cr.GetType() == typeof(TextBox))
                {
                    TextBox txt = (TextBox)cr;
                    txt.Enabled = val;
                }
                if (cr.GetType() == typeof(ComboBox))
                {
                    ComboBox cob =(ComboBox)cr;
                    cob.Enabled=val;
                }
                if (cr.GetType() == typeof(DateTimePicker))
                {
                    DateTimePicker dtime = (DateTimePicker)cr;
                    dtime.Enabled = val;
                }
            }
        }
        private void BatTatButton(bool val) //Hàm bật tắt button. val=true bật them xóa sửa, !val tắt
        {
            btnThem.Enabled = val;
            btnSua.Enabled = val;
            btnXoa.Enabled = val;
            btnLuu.Enabled = !val;
        }
        private void XoaTextBox() // hàm xóa trắng các textbox nhập thông tin
        {
            foreach (Control cr in grbThongTinNhanVien.Controls)
            {
                if (cr.GetType() == typeof(TextBox))
                {
                    TextBox txt = (TextBox)cr;
                    txt.Clear();
                }                
            }

        }
        private void UcQuanLyNhanVien_Load(object sender, EventArgs e)
        {
            loadData();
            BatTatTextBox(false);
            BatTatButton(true);
            btnThem.Focus();
        }

        private void gridViewNhanVien_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e) // dữ liệu được đưa lên textbox khi vị trí trỏ chuột thay đổi
        {
            txtMaNV.Text = gridViewNhanVien.GetFocusedRowCellDisplayText("MaNV");
            txtHoTen.Text = gridViewNhanVien.GetFocusedRowCellDisplayText("HoTen");
            dtNgaySinh.Text = gridViewNhanVien.GetFocusedRowCellDisplayText("NgaySinh");
            cobGioiTinh.Text = gridViewNhanVien.GetFocusedRowCellDisplayText("GioiTinh");
            txtSDT.Text = gridViewNhanVien.GetFocusedRowCellDisplayText("SDT");
            txtDiaChi.Text = gridViewNhanVien.GetFocusedRowCellDisplayText("DiaChi");
            dtNgayVaoLam.Text = gridViewNhanVien.GetFocusedRowCellDisplayText("NgayVaoLam");
            try
            {
                cobTo.SelectedValue = gridViewNhanVien.GetFocusedRowCellDisplayText("MaTo");
            }
            catch
            {
                cobTo.SelectedValue = "1"; // có thời gian sửa lại chổ này, lấy giá trị max mã tổ gán vào
            }
        }
        private int KiemTraTrungMaNhanVien(string manv)
        {
                SqlCommand cmd = new SqlCommand("tblNhanVien_KiemTraMaNV", cn.ketnoi());
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("manv", SqlDbType.VarChar)).Value = manv;
                object kq = cmd.ExecuteScalar();
                cn.ketnoi().Close();
                return Convert.ToInt32(kq);
        }
        private void gridViewNhanVien_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e)
        {
            if (e.RowHandle == gridViewNhanVien.FocusedRowHandle)
            {
                e.Appearance.BackColor = Color.DeepSkyBlue;
            }
        }

        private void btnThem_Click(object sender, EventArgs e) // kích hoạt khi click nút thêm
        {
            BatTatTextBox(true);
            BatTatButton(false);
            XoaTextBox();
            try
            {
                string lastID = cn.GetTopDataCell("tblNhanVien", "MaNV", "MaNV");
                string nextID = cn.NextID(lastID, "NV");                        
                txtMaNV.Text = nextID;
            }
            catch
            {
                txtMaNV.Text = "NV0001";
            }
            txtMaNV.Enabled = false;
            them = true;
            txtHoTen.Focus();
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {                        
            if (txtHoTen.Text == "")
            {
                MessageBox.Show("Bạn chưa nhập họ tên nhân viên", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtHoTen.Clear();
                txtHoTen.Focus();
            }
            else if (dtNgaySinh.Value > DateTime.Now)
            {
                MessageBox.Show("Bạn nhập sai ngày sinh.", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                dtNgaySinh.Focus();
            }
            else
            {
                if (them == true)
                {                    
                        if (KiemTraTrungMaNhanVien(txtMaNV.Text) > 0)
                        {
                            MessageBox.Show("Mã Nhân viên đã có trong cơ sở dữ liệu", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            txtMaNV.Clear();
                            txtMaNV.Focus();
                        }                 
                        else
                        {
                            SqlCommand cmd = new SqlCommand("tblNhanVien_Them", cn.ketnoi());
                            cmd.CommandType = CommandType.StoredProcedure;
                            cmd.Parameters.Add(new SqlParameter("manv", SqlDbType.VarChar)).Value = txtMaNV.Text;
                            cmd.Parameters.Add(new SqlParameter("hoten", SqlDbType.NVarChar)).Value = txtHoTen.Text;
                            cmd.Parameters.Add(new SqlParameter("ngaysinh", SqlDbType.DateTime)).Value = dtNgaySinh.Value;
                            cmd.Parameters.Add(new SqlParameter("gioitinh", SqlDbType.NVarChar)).Value = cobGioiTinh.Text;
                            cmd.Parameters.Add(new SqlParameter("diachi", SqlDbType.NVarChar)).Value = txtDiaChi.Text;
                            cmd.Parameters.Add(new SqlParameter("sdt", SqlDbType.VarChar)).Value = txtSDT.Text;
                            cmd.Parameters.Add(new SqlParameter("ngayvaolam", SqlDbType.DateTime)).Value = dtNgayVaoLam.Value;
                            cmd.Parameters.Add(new SqlParameter("mato", SqlDbType.Int)).Value = cobTo.SelectedValue;
                            if (cmd.ExecuteNonQuery() == 1)
                            {
                                UcQuanLyNhanVien_Load(sender, e);                                
                            }
                        }
                        cn.ketnoi().Close();
                        cn.ketnoi().Dispose();
                }
                else
                {
                    if (txtMaNV.Text !=gridViewNhanVien.GetRowCellValue(gridViewNhanVien.FocusedRowHandle,gridViewNhanVien.Columns["MaNV"]).ToString())
                    {
                        if (KiemTraTrungMaNhanVien(txtMaNV.Text) > 0)
                        {
                            MessageBox.Show("Mã Nhân viên đã có trong cơ sở dữ liệu", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            txtMaNV.Focus();
                        }                        
                    }
                    else
                    {
                        SqlCommand cmd_sua = new SqlCommand("tblNhanVien_Sua", cn.ketnoi());
                        cmd_sua.CommandType = CommandType.StoredProcedure;
                        cmd_sua.Parameters.Add(new SqlParameter("manv", SqlDbType.VarChar)).Value = txtMaNV.Text;
                        cmd_sua.Parameters.Add(new SqlParameter("hoten", SqlDbType.NVarChar)).Value = txtHoTen.Text;
                        cmd_sua.Parameters.Add(new SqlParameter("ngaysinh", SqlDbType.DateTime)).Value = dtNgaySinh.Value;
                        cmd_sua.Parameters.Add(new SqlParameter("gioitinh", SqlDbType.NVarChar)).Value = cobGioiTinh.Text;
                        cmd_sua.Parameters.Add(new SqlParameter("diachi", SqlDbType.NVarChar)).Value = txtDiaChi.Text;
                        cmd_sua.Parameters.Add(new SqlParameter("sdt", SqlDbType.VarChar)).Value = txtSDT.Text;
                        cmd_sua.Parameters.Add(new SqlParameter("ngayvaolam", SqlDbType.DateTime)).Value = dtNgayVaoLam.Value;
                        cmd_sua.Parameters.Add(new SqlParameter("mato", SqlDbType.Int)).Value = cobTo.SelectedValue;
                        if (cmd_sua.ExecuteNonQuery() == 1)
                        {
                            UcQuanLyNhanVien_Load(sender, e);
                            gridViewNhanVien.FocusedRowHandle = vitri; // sau khi sửa chọn lại vị trí trước đó
                        }
                    }
                    cn.ketnoi().Close();
                    cn.ketnoi().Dispose();
                }
            }
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            if (txtMaNV.Text == "")
            {
                MessageBox.Show("Bạn chưa chọn nhân viên để sửa, vui lòng chọn nhân viên để tiến hành sửa", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                loadData();
            }
            else
            {
                BatTatButton(false);
                BatTatTextBox(true);
                txtMaNV.Enabled = false;
                them = false;
                vitri = (int)gridViewNhanVien.FocusedRowHandle;            
            }
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn có chắc chắn muốn xóa nhân viên " + txtHoTen.Text + " không?\nNếu bạn chọn Yes tất cả dữ liệu liên quan đến nhân viên này sẽ được xóa vĩnh viễn khỏi hệ thống!!!", "Thông Báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
            {
                SqlCommand cmd = new SqlCommand("tblNhanVien_Xoa",cn.ketnoi());
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("manv",SqlDbType.VarChar)).Value = txtMaNV.Text;
                if (cmd.ExecuteNonQuery() == 1)
                {
                    MessageBox.Show("Đã xóa dữ liệu thành công", "Thông Báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    UcQuanLyNhanVien_Load(sender, e);
                    cn.ketnoi().Close();
                    cn.ketnoi().Dispose();
                }
            }
        }

        private void btnLamMoi_Click(object sender, EventArgs e)
        {
            UcQuanLyNhanVien_Load(sender, e);
            gridViewNhanVien.FocusedRowHandle = 0;            
        }

        private void simpleButton2_Click(object sender, EventArgs e)
        {
            frmInNhanVien _frmInNV = new frmInNhanVien();
            _frmInNV.ShowDialog();
        }

        private void txtTim_TextChanged(object sender, EventArgs e)
        {
            if (txtTim.Text != "Nhập từ khóa tìm kiếm")
            {
                gridViewNhanVien.Columns.Clear();
                gridViewNhanVien.OptionsBehavior.Editable = false;
                SqlCommand cmd = new SqlCommand("tblNhanVien_TimKiem", cn.ketnoi());
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("tim", SqlDbType.NVarChar)).Value = txtTim.Text;
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
                da.Fill(dt);
                gridControlNhanVien.DataSource = dt;
            }
        }

        private void btnclear_Click(object sender, EventArgs e)
        {
            txtTim.Text = "";
        }

        private void txtSDT_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void txtHoTen_KeyPress(object sender, KeyPressEventArgs e)
        {            
        }

        private void txtHoTen_Leave(object sender, EventArgs e)
        {
            txtHoTen.Text = cn.ToProperName(txtHoTen.Text);
        }

        private void txtDiaChi_Leave(object sender, EventArgs e)
        {
            txtDiaChi.Text = cn.ToProperName(txtDiaChi.Text);
        }

        private void txtTim_Enter(object sender, EventArgs e)
        {
            if (txtTim.Text == "Nhập từ khóa tìm kiếm")
            {
                txtTim.Text = "";
            }
        }

        private void txtTim_Leave(object sender, EventArgs e)
        {
            if (txtTim.Text == "")
            {
                txtTim.Text = "Nhập từ khóa tìm kiếm";
            }
        }
    }
}
